home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Info-Mac 4
/
Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso
/
Development
/
Source
/
tarsrc Folder
/
pref.c
< prev
next >
Wrap
Text File
|
1993-11-27
|
4KB
|
149 lines
/*
* Macintosh Tar
*
* The routines in this file deal with the preference file.
*
* Written by Craig Ruff.
*/
#include "tar.h"
#include <Folders.h>
#include <GestaltEqu.h>
char *prefName = "\pTarPrefs";
long prefDirID = 2;
short prefVRefNum = 0;
struct pref pref;
GetPreferences()
{
long mask;
struct pref upref;
HParamBlockRec volpb;
HParamBlockRec fpb;
/*
* Make some defaults incase we don't find any later.
*/
pref.autoPage = false;
pref.cvtNl = false;
pref.dosCvt = false;
pref.doPrint = false;
pref.floppy = false;
pref.oldArch = false;
pref.blocking = 20;
pref.blockSize = pref.blocking * RECORDSIZE;
memcpy(pref.creator, "MPS ", 4);
memcpy(pref.type, "TEXT", 4);
pref.doOverWrite = false;
pref.tape = false;
TapeDefaults(&pref.tapeVars);
if (
(Gestalt(gestaltFindFolderAttr, &mask) != noErr) ||
!(mask & (1 << gestaltFindFolderPresent)) ||
(FindFolder(0, kPreferencesFolderType, false,
&prefVRefNum, &prefDirID) != noErr)
) {
/*
* Find the 'Blessed Folder' as per TN 67.
*/
volpb.volumeParam.ioCompletion = nil;
volpb.volumeParam.ioNamePtr = nil;
volpb.volumeParam.ioVRefNum = 0;
volpb.volumeParam.ioVolIndex = 0;
PBHGetVInfo(&volpb, false);
if (volpb.volumeParam.ioResult == noErr) {
prefDirID = volpb.volumeParam.ioVFndrInfo[1];
prefVRefNum = volpb.volumeParam.ioVRefNum;
}
}
fpb.fileParam.ioCompletion = nil;
fpb.fileParam.ioNamePtr = prefName;
fpb.fileParam.ioVRefNum = prefVRefNum;
fpb.fileParam.ioFVersNum = 0;
fpb.fileParam.ioDirID = prefDirID;
fpb.ioParam.ioPermssn = fsRdPerm;
fpb.ioParam.ioMisc = nil;
if (PBHOpen(&fpb, false) == noErr) {
fpb.ioParam.ioBuffer = (Ptr) &upref;
fpb.ioParam.ioReqCount = sizeof(upref);
fpb.ioParam.ioPosMode = fsFromStart;
fpb.ioParam.ioPosOffset = 0;
if (
(PBRead((ParmBlkPtr) &fpb, false) == noErr) &&
(fpb.ioParam.ioActCount == sizeof(pref))
) {
memcpy(&pref, &upref, sizeof(pref));
}
PBClose((ParmBlkPtr) &fpb, false);
}
}
/*
* SavePreferences - save them in a preference file
*/
SavePreferences()
{
OSErr err;
HParamBlockRec fpb;
char *routine = "\pSavePreferences";
fpb.fileParam.ioCompletion = nil;
fpb.fileParam.ioNamePtr = prefName;
fpb.fileParam.ioVRefNum = prefVRefNum;
fpb.fileParam.ioFVersNum = 0;
fpb.fileParam.ioDirID = prefDirID;
err = PBHCreate(&fpb, false);
if ((err != noErr) && (err != dupFNErr)) {
OSAlert(routine, "\pPBHCreate", prefName,
fpb.fileParam.ioResult);
return;
}
fpb.fileParam.ioCompletion = nil;
fpb.fileParam.ioNamePtr = prefName;
fpb.fileParam.ioVRefNum = prefVRefNum;
fpb.fileParam.ioDirID = prefDirID;
fpb.fileParam.ioFVersNum = 0;
fpb.fileParam.ioFDirIndex = 0;
if (PBHGetFInfo(&fpb, false)) {
OSAlert(routine, "\pPBHGetFInfo", prefName,
fpb.fileParam.ioResult);
return;
}
memcpy(&fpb.fileParam.ioFlFndrInfo.fdCreator, "TAR ", 4);
memcpy(&fpb.fileParam.ioFlFndrInfo.fdType, "PREF", 4);
fpb.fileParam.ioCompletion = nil;
fpb.fileParam.ioNamePtr = prefName;
fpb.fileParam.ioVRefNum = prefVRefNum;
fpb.fileParam.ioDirID = prefDirID;
fpb.fileParam.ioFVersNum = 0;
if (PBHSetFInfo(&fpb, false)) {
OSAlert(routine, "\pPBHSetFInfo", prefName,
fpb.fileParam.ioResult);
return;
}
fpb.ioParam.ioPermssn = fsWrPerm;
fpb.ioParam.ioMisc = nil;
if (PBHOpen(&fpb, false) != noErr) {
OSAlert(routine, "\pPBHOpen", prefName,
fpb.fileParam.ioResult);
return;
}
fpb.ioParam.ioBuffer = (Ptr) &pref;
fpb.ioParam.ioReqCount = sizeof(pref);
fpb.ioParam.ioPosMode = fsFromStart;
fpb.ioParam.ioPosOffset = 0;
if ((err = PBWrite((ParmBlkPtr) &fpb, false)) != noErr)
OSAlert(routine, "\pPBWrite", prefName, err);
PBClose((ParmBlkPtr) &fpb, false);
}